package com.hua.designpattern.structural.proxy;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

/**
 * 
 * @author joshua
 *
 *         <pre>
 *
 *CGLIB
 *
 *反射机制在生成类的过程中比较高效，而asm在生成类之后的相关执行过程中比较高效（可以通过将asm生成的类进行缓存，这样解决asm生成类过程低效问题）。
 *jdk动态代理的应用前提，必须是目标类基于统一的接口。如果没有上述前提，jdk动态代理不能应用。
 *由此可以看出，jdk动态代理有一定的局限性，cglib这种第三方类库实现的动态代理应用更加广泛，且在效率上更有优势。
 *
 *         </pre>
 *
 */

public class DynamicProxyMethodInterceptor implements MethodInterceptor {

	@Override
	public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
		System.out.println("++CGLIB++add log:start invoke method " + method.getName() + "    " + methodProxy.getSuperName());
		Object o1 = methodProxy.invokeSuper(proxy, args);
		System.out.println("--CGLIB--add log:end invoke method " + method.getName() + "    " + methodProxy.getSuperName());
		return o1;
	}

}
